package Algorithm.A4;
/*
* @Author :lcy
* @Description :
* 问题描述：
* 在下面的数字三角形中寻找一条从顶部到底边的路径，使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。
*     7
*    3 8
*   8 1 0
*  2 7 4 4
* 4 5 2 6 5
* @Date 2021/11/27 15:44
* 算法思路：
* 在三角形中，每个位置的最大路径和为 当前位置值+max(左上最大和，右上最大和)。
* 具体在数组中，是上面的和左上的位置的最大和。
* 遍历数组，获得每个位置的最大和，并且同时更新变量max，返回max。
*/

public class NumberTriangle {
    public static void main(String[] args) {
        int k=5;
        int[][] map=new int[][]{
                {7},
                {3,8},
                {8,1,0},
                {2,7,4,4},
                {4,5,2,6,5}
        };
        int res=count(map,k);
        System.out.println(res);
    }

    public static int count(int[][] dp,int k) {
        int max=0;
        for(int i=1;i<k;i++){
            for(int j=0;j<=i;j++){
                int a=0;
                int b=0;
                //左上有值
                if(j-1>=0)
                    a=dp[i-1][j-1];
                //上有值
                if(j<i)
                    b=dp[i-1][j];

                dp[i][j]+=Math.max(a,b);
                max=Math.max(max,dp[i][j]);
            }
        }
        return max;
    }

}
